#!/usr/bin/env python
# -*- coding:utf-8 -*-
import random
import pickle
from collections import defaultdict

class Player(object):   #定义球员属性
    def __init__(self,name,age,speed,strong,power):
        self.name=name      #球员名字
        self.age=age        #年龄
        self.speed=speed    #速度
        self.strong=strong  #力量
        self.power=power    #球员体力
        self.stat=random.randint(1,1000)  #球员状态，随机值，random()
        self.score=self.speed+self.strong+self.power-self.age+self.stat   #根据状态值计算球员总体得分
    def train(self):    #刻苦训练，战力+100
        self.score=self.score+100
        return self.score
    @property           #定义成属性，方便调用；
    def injured(self):  #受伤，战力-100
        self.score=self.score-100
        return self.score
    def __call__(self, *args, **kwargs):    #利用特殊成员call，方便调用self
        player= "姓名:%s ; 年龄:%s ; 速度:%s; 力量:%s; 体力:%s;状态:%s; 总战力:%s"  % (self.name, self.age, self.speed, self.strong,self.power,self.stat,self.score)
        return player

'''
#--简单调用--
#国际球星
meixi=Player("梅西",22,100,86,90)
kaka=Player("卡卡",30,95,100,88)
cluo=Player("C罗",18,100,90,100)
#屌丝球星
zhangsan=Player("张三",25,88,60,50)
lisi=Player("李四",24,50,86,50)
wangwu=Player("王五",30,66,77,88)
meixi()
meixi.train()
meixi()
meixi.injured()
meixi()
'''

# class action():         #定义个基类，所有球队共有的方法
#     def money(self):    #球队给队员发奖金，战力提升300
#         self.score=self.score+300
#     def fight(self):    #球队内部斗争，战力下降300
#         self.score=self.score-300
#
# class team1(action):
#     def __init__(self):
#         pass
#         #self.score=meixi.score+kaka.score+cluo.score
#     def money(self):
#         self.score=self.score+300
# star=team1()    #明星队
#
# class team2(action):
#     def __init__(self):
#         pass
#     @property
#     def girls(self):    #屌丝大招，配美女助理，战力提升1000
#         self.score=self.score+1000
#         return self.girls
# loser=team2()     #业余队
#
# star.money()
# loser.girls

'''
创建球员，需要根据用户的输入自定义参数；
所有球员的信息都保存在一个字典里，方便查询，修改，存档，读取等；
通过一个临时值EnameTmp保存对象在内存中的地址，方便其他功能调用。
字典的格式:defaultdict(<type 'list'>, {'obj': [<__main__.Player object at 0x00000000022A3358>, '\xe5\xa7\x93\xe5\x90\x8d:xxc ; \xe5\xb9\xb4\xe9\xbe\x84:22 ; \xe9\x80\x9f\xe5\xba\xa6:88; \xe5\x8a\x9b\xe9\x87\x8f:88; \xe4\xbd\x93\xe5\x8a\x9b:88;\xe7\x8a\xb6\xe6\x80\x81:98; \xe6\x80\xbb\xe6\x88\x98\xe5\x8a\x9b:440']})
'''
PlayerDict=defaultdict(list)        #定义默认value是list的字典
def CreatePlayer():
    Ename=raw_input("球员实例名称：")
    EnameTmp=Ename      #通过临时值能写入字典，不然Ename一会就变了；
    name=raw_input("球员名字：")
    age=int(raw_input("球员年龄："))
    speed=int(raw_input("速度："))
    strong=int(raw_input("力量："))
    power=int(raw_input("体力："))
    Ename=Player(name,age,speed,strong,power)   #创建对象，实例化一个球员；
    PlayerInfo=Ename()      #调用__call__,obj()获取球员信息，存入字典中的列表；
    PlayerDict[EnameTmp]=[Ename,Ename()]    #写入字典

'''
根据用户输入球员的实例名称，从字典获取球员信息；
另外，球员可以通过训练和受伤来改变战斗力，修改后要更新字典；
'''
def FetchPlayer():
    print PlayerDict
    for player in PlayerDict.keys():
        print player
    UserInputPlayer=raw_input("请输入球员：")
    PlayerEname=PlayerDict[UserInputPlayer][0]      #取字典列表里的值
    PlayerInfo=PlayerDict[UserInputPlayer][1]
    print PlayerInfo

    while True:
        print "操作列表：\n1、球员训练\n2、球员受伤\n3、返回上一级"
        UserInput=raw_input("请选择操作序号：")
        if UserInput=="1":
            PlayerEname.train()         #调用Player类里的方法，训练；
            PlayerDict[UserInputPlayer][1]=PlayerEname()      #更新字典
            print PlayerDict[UserInputPlayer][1]
        elif UserInput=="2":
            PlayerEname.injured     #因为定义成了属性，所以调用时不加括号，和上面的train()不同；
            PlayerDict[UserInputPlayer][1]=PlayerEname()   #调用Player类里的方法，受伤；
            print PlayerDict[UserInputPlayer][1]      #写入字典，每次修改都展现给玩家；
        elif UserInput=="3":
            break
        else:
            print "输入错误"

def Match():
    if star.score-loser.score>0:        #按球队总战斗力进行比较
        print "Team star win the game!"
    else:
        print "Team loser win the game!"

def GameSave():
    with open("game.save","wb")as fw:
        pickle.dump(PlayerDict,fw)      #用pickle模块把字典序列化到磁盘存档
    print "游戏存档成功！"

def GameLoad():
    with open("game.save","rb")as fr:
        PlayerDict=pickle.load(fr)      #反序列化
    print "游戏读取进度成功！"
    return PlayerDict                   #字典加载到当前游戏

OperationList=["球员操作","球队操作","比赛","游戏存档","读取进度","退出"]
PlayerOperationList=["球员训练","球员受伤"]
teamdic={"创建球队":"","选择球队":["球队奖励","球队矛盾","特殊奖励"]}

while True:
    for num,operation in enumerate(OperationList,1):
        print num,operation
    UserInput=raw_input("请选择操作序号：")
    if UserInput=="1":  #球员操作
        while True:
            print "操作列表：\n1、创建球员\n2、选择已有球员\n3、返回上一级"
            UserInput=raw_input("请选择操作序号：")
            if UserInput=="1":
                CreatePlayer()
            elif UserInput=="2":
                FetchPlayer()
            elif UserInput=="3":
                break
            else:
                print "输入错误"
    elif UserInput=='2':    #球队操作
        pass
    elif UserInput=="3":    #球队比赛
        Match()
    elif UserInput=="4":    #游戏存档
        GameSave()
    elif UserInput=="5":    #读取进度
        PlayerDict=GameLoad()
    elif UserInput=="6":    #退出
        break
    else:
        print "输入错误！"